package com.example.demos.controller;

import java.security.PublicKey;
import java.util.Scanner;

/*
 * 酒店订房系统
 * 
 * 数据持久化：
 * 1.使用文件保存---使用JavaIO留存取文件中的数据
 * 2.数据库保存 问西兴数据库（mysql、oracle） 非关系型数据库（radius、mongoDB）
 * 		JDBC 访问数据库
 * 		Hibernate -- 用得少，老项目
 * 		mybatis -- 用得不较多
 */
public class HotelOrderSystem {
	private static String[][] rooms = null;
	private static String[][] names = null;
	private static Scanner scanner;

	public static void main(String[] args) {
		//定义酒店的楼层
		int row = 9;
		//定义酒店的楼层的房间数
		int col = 9;

		//定义一个二维数组，用来存放房间的入住状态，没人入住就显示empty
//		String[][] 
				rooms = new String[row][col];
				names = new String[row][col];
		scanner = new Scanner(System.in);

		//初始化酒店的房间，把所有的房间入住状态都设置为empty
		for(int i = 0;i < rooms.length;i++) {
			for(int j = 0;j < rooms[i].length;j++) {
				rooms[i][j] = "empty";

			}
		}
		//来一个死循环，让系统可以一直运行下去
		while (true) {
			help();
			//接收输入的指令
			String con = scanner.next();
			if(con.equals("search")) {
				//查询房间的入住状态
				searchRoom();
			}else if(con.equals("in")) {
				//预订房间
				orderInRoom();
			}else if(con.equals("out")) {
				//退房
				orderOutRoom();
			}else if(con.equals("exit")) {
				//退出系统
				System.out.println("客观慢走！！！");

				break;
			}
		}
		
	}
	
	/*
	 * 退房
	 */
	public static void orderOutRoom() {
		System.out.println("请输入你要退出的房间号:");
		int num = scanner.nextInt();
		//输入的是1001号房
				//判断该房间是否有人入住
				//判断1001号房对应的状态是否为empty
				//1001号房在二维数组中的位置[0][0] - 在二维数据中反向取出i 和 j
				int row = num/1000 - 1;
				int col = num%1000 - 1;
				//如果输入的房间号无人入住
				if(rooms[row][col].equals("empty")) {
					System.out.println("房间无人入住，无需退房");
				}else {
					System.out.println("请输入姓名:");
					String name = scanner.next();
					if(names[row][col].equals(name)) {
						//如果输入的姓名和和入住的姓名一样，就可以退房
						//将房间的入住状态修改成empty
						rooms[row][col] = "empty";
						//将对应的房间名字清空
						names[row][col] = null;
						System.out.println("退房成功~~~");
					}else {
						//如果输入的姓名和和入住的姓名不一样，无权退房
						System.out.println("房间必须由本人来退~~~");
					}
					queryCurrentRoom();

				}
	}
	
	/*
	 * 查询房间的入住状态
	 */
	public static void orderInRoom() {
		System.out.println("请输入你要预订的房间号");
		int num = scanner.nextInt();
		//输入的是1001号房
		//判断该房间是否有人入住
		//判断1001号房对应的状态是否为empty
		//1001号房在二维数组中的位置[0][0] - 在二维数据中反向取出i 和 j
		int row = num/1000 - 1;
		int col = num%1000 - 1;
		//如果输入的房间号无人入住
		if(rooms[row][col].equals("empty")) {
			System.out.println("请输入您的姓名:");
			//接收输入的姓名
			String name = scanner.next();
			//将房间的入住状态修改成姓名
			rooms[row][col] = name;
			names[row][col] = name;
			System.out.println(name + "成功预订" + num + " 号房间~~~");
			System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
			
			queryCurrentRoom();
//			for(int i = 0;i < rooms.length;i++) {
//				for(int j = 0;j < rooms[i].length;j++) {
//					System.out.print((i + 1) * 1000 + (j + 1)+"\t");
//				}
//				System.out.println();
//
//				//遍历房间的状态
//				for(int j = 0;j < rooms[i].length;j++) {
//					System.out.print(rooms[i][j]+" \t");
//				}
//				System.out.println();
//
//			}
		}else {
			System.out.println("想啥呢？" + num + " 号房间已经有人预订了！！");

		}
		
	}
	
	/*
	 * 查询当前的房间入住状态
	 */
	public static void queryCurrentRoom() {
		for(int i = 0;i < rooms.length;i++) {
			for(int j = 0;j < rooms[i].length;j++) {
				System.out.print((i + 1) * 1000 + (j + 1)+"\t");
			}
			System.out.println();

			//遍历房间的状态
			for(int j = 0;j < rooms[i].length;j++) {
				System.out.print(rooms[i][j]+" \t");
			}
			System.out.println();

		}
	}
	
	/*
	 * 查询房间的入住状态
	 */
	public static void searchRoom() {
		for(int i = 0;i < rooms.length;i++) {
			
			for(int j = 0;j < rooms[i].length;j++) {
				System.out.print((i + 1) * 1000 + (j + 1)+"\t");
			}
			System.out.println();
			//遍历房间的状态
			for(int j = 0;j < rooms[i].length;j++) {
				rooms[i][j] = "empty";
				System.out.print(rooms[i][j]+" \t");
			}
			System.out.println();
			System.out.println("~~~~~~~~~~~~~~~");

		}
	}
	/*
	 * 系统帮助方法，提供操作提示
	 */
	public static void help() {
		System.out.println("~~~~~~~~~~~~~~~");
		System.out.println("~~~~欢迎来到 枫林晚酒店~~~~~");
		System.out.println("~~~~请选择操作~~~~");
		System.out.println("~~~~输入search 查询房间入住状态~~~~");
		System.out.println("~~~~输入 in 预订房间~~~~~");
		System.out.println("~~~~输入 out 退房~~~~~");
		System.out.println("~~~~输入 exit 退出系统~~~~~");
		System.out.println("~~~~~~~~~~~~~~~");
		System.out.println("~~~~请输入指令:~~~~~");
		System.out.println("~~~~~~~~~~~~~~~");
		System.out.println("~~~~~~~~~~~~~~~");
		System.out.println("~~~~~~~~~~~~~~~");

	}
}
